<?php
	/**
	 * 系统公共库文件
	 * 主要定义系统公共函数库
	 */

	/**
	 * 检测用户是否登录
	 * @return integer 0-未登录，大于0-当前登录用户ID
	 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
	 */
	function is_login(){
		$user = session('user_auth');
		if (empty($user)) {
			return 0;
		} else {
			return session('user_auth_sign') == data_auth_sign($user) ? $user['uid'] : 0;
		}
	}
	/**
	 * 检测当前用户是否为管理员
	 * @return boolean true-管理员，false-非管理员
	 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
	 */
	 function is_administrator($uid = null){
		 $uid=is_null($uid) ? is_login() : $uid;
		 return $uid && (intval($uid)=== C('USER_ADMINISTRATOR'));
	 }
	if(!function_exists('array_column')){
		function array_column(array $input, $columnKey, $indexKey = null){
			$result=array();
			if($indexKey==null){
				if($columnKey==null){
					$result=array_values($input);
				}else{
					foreach($input as $row){
						$result[]=$row[$columnKey];
					}
				}

			}else {
				if (null === $columnKey) {
					foreach ($input as $row) {
						$result[$row[$indexKey]] = $row;
					}
				} else {
					foreach ($input as $row) {
						$result[$row[$indexKey]] = $row[$columnKey];
					}
				}
			 }
			return $result;

		}
	}
	/**
	 * 把返回的数据集转换成Tree
	 * @param array $list 要转换的数据集
	 * @param string $pid parent标记字段
	 * @param string $level level标记字段
	 * @return array
	 */
	function list_to_tree($list, $pk='id', $pid = 'pid', $child = '_child', $root = 0) {
    // 创建Tree
    $tree = array();
    if(is_array($list)) {
        // 创建基于主键的数组引用
        $refer = array();
        foreach ($list as $key => $data) {
            $refer[$data[$pk]] =& $list[$key];
        }
        foreach ($list as $key => $data) {
            // 判断是否存在parent
            $parentId =  $data[$pid];
            if ($root == $parentId) {
                $tree[] =& $list[$key];
            }else{
                if (isset($refer[$parentId])) {
                    $parent =& $refer[$parentId];
                    $parent[$child][] =& $list[$key];
                }
            }
        }
    }
    return $tree;
}
/**
 * 调用系统的API接口方法（静态方法）
 * api('User/getName','id=5'); 调用公共模块的User接口的getName方法
 * api('Admin/User/getName','id=5');  调用Admin模块的User接口
 * @param  string  $name 格式 [模块名]/接口名/方法名
 * @param  array|string  $vars 参数
 */
 function api($name,$vars=array()){
		$arr = explode('/',$name);
		$method = array_pop($arr);
		$classname = array_pop($arr);
		$module = $array?array_pop($arr) : 'Common';
		$callback = $module.'\\Api\\'.$classname.'Api::'.$method;
		if(is_string($vars)){
			parse_str($vars,$vars);
		}
		return call_user_func_array($callback,$vars);
 }
/**
 * 数据签名认证
 * @param  array  $data 被认证的数据
 * @return string       签名
 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
 */
function data_auth_sign($data) {
    //数据类型检测
    if(!is_array($data)){
        $data = (array)$data;
    }
    ksort($data); //排序
    $code = http_build_query($data); //url编码并生成query字符串
    $sign = sha1($code); //生成签名
    return $sign;
}
/**
 * 处理插件钩子
 * @param string $hook   钩子名称
 * @param mixed $params 传入参数
 * @return void
 */
function hook($hook,$params=array()){
    \Think\Hook::listen($hook,$params);
}
/**
 * 根据用户ID获取用户名
 * @param  integer $uid 用户ID
 * @return string       用户名
 */
function get_username($uid= null){
	static $list;
	if(!($uid && is_numeric($uid))){
		return session('user_auth.username');
	}

}
?>